<?php
/*
 * description：
 * author：wh
 * email：
 * createTime：{2019/11/1} {15:09} 
 */

namespace libraries;


class Validate
{

    /**
     * 验证手机号是否正确
     * @author wh
     */
    static function is_mobile($m) {
        if (!is_numeric($m)) {
            return false;
        }
        $p = preg_match('/^1[3,4,5,6,7,8,9]{1}\d{9}$/', $m);
        return $p ? true : false;
    }

    /**
     * 验证邮箱
     * author：wh
     * @param $email
     * @return bool
     */
    static function is_email($email){
        return preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/",$email)?true:false;
    }

    /**
     * desc：验证空，除0以外，0表示非空
     * author：wh
     * @param $p
     * @return bool
     */
    static function is_empty($p){
        if(empty($p)){
            return true;
        }
        $r = false;
        foreach ($p as $val){
            if($val === '0'){
                continue;
            }
            if($val === 0){
                continue;
            }
            if(empty($val)){
                $r = true;
            }
        }
        return $r;
    }

    /**
     * [is_IDCard 验证身份证号码]
     * @Author QiaoWeiWei
     * @Date   2019-11-26
     * @param  [string]     $string [身份证号]
     * @return boolean         [description]
     */
    static function is_IDCard($string){
        return preg_match("/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/", $string)?true:false;
    }

    /**
     * [is_account_num 银行卡号验证]
     * @Author QiaoWeiWei
     * @Date   2019-11-26
     * @param  [string]     $bankNo [银行卡号]
     * @return boolean         [description]
     */
    static function is_account_num($bankNo){
        if($bankNo === '' || !preg_match('/^[0-9]*$/',$bankNo)){
            return false;
        }
        // 奇数位之和
        $sumOdd = 0;
        // 偶数位之和
        $sumEven = 0;
        // 长度
        $length = strlen($bankNo);
        $wei = [];
        for ($i = 0; $i < $length; $i++) {
            $wei[$i] = substr($bankNo, $length - $i - 1, 1);// 从最末一位开始提取，每一位上的数值
        }
        for ($j = 0;$j < $length;$j++){
            if($j % 2 == 0){
                $sumOdd += $wei[$j];
            }else{
                if($wei[$j]*2 > 9){
                    $sumEven += (substr($wei[$j]*2,-1) + 1);
                }else{
                    $sumEven += ($wei[$j]*2);
                }
            }
        }
        if (($sumOdd + $sumEven) % 10 == 0) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 验证银行卡号
     * @param  string $bankCardNo 银行卡号
     * @return bool             是否合法(true:合法,false:不合法)
     */
    static function checkBankCard($bankCardNo){
        if(strlen($bankCardNo)<12){
            return false;
        }
        if(strlen($bankCardNo) > 19){
            return false;
        }
        return true;
	}
    /**
     * [is_string_length_legal 字符串长度是否符合要求]
     * @Author QiaoWeiWei
     * @Date   2019-11-27
     * @param  [type]     $string     [被验证的字符串]
     * @param  integer    $min_length [最小长度]
     * @param  integer    $max_length [最大长度]
     * @return boolean                [description]
     */
    static function is_string_length_legal($string,$min_length = 0,$max_length = 0){
        if(mb_strlen($string) < $min_length || mb_strlen($string) > $max_length){
            return false;
        }

        return true;
    }

    /**
     * [is_date 验证字符串是否是yyyy-mm-dd格式日期]
     * @Author QiaoWeiWei
     * @Date   2019-11-28
     * @param  [type]     $string [被验证字符串]
     * @return boolean            [description]
     */
    static function is_date($string){
        if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $string, $parts)){
            //检测是否为日期
            if(!checkdate($parts[2],$parts[3],$parts[1])){
                return false;
            }
        }else{
            return false;
        }
        return true;
    }

    /**
     * [is_pwd_legal 验证密码是否合法]
     * @Author QiaoWeiWei
     * @Date   2019-12-06
     * @param  [type]     $string [description]
     * @return boolean            [description]
     */
    static function is_pwd_legal($string){
        $reg = '/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,}$/';
        return preg_match($reg, $string)?true:false;
    }


    /**
     * @deprecated 函数不准确，废除
     * desc：
     * author：wh
     * @param $money
     * @return bool
     */
    static function is_money_legal($money){
        if(!is_numeric($money) || $money <= 0){
            return false;
        }
        if(strpos($money, '.') !== false){
            $int_part = substr($money, 0,strpos($money, '.'));
            $float_part = substr($money, strpos($money, '.')+1);

            if(strlen($int_part)>1 && substr($int_part, 0,1)==0){
                return false;
            }
            if(strlen($float_part)>2 || strlen($float_part)==0){
                return false;
            }
        }else{
            if(strlen($money)>1 && substr($money, 0,1)==0){
                return false;
            }
        }
        return true;
    }

    /**
     * [is_money_times 验证金额是否是100的整数倍]
     * @Author QiaoWeiWei
     * @Date   2019-12-12
     * @param  [type]     $money [金额]
     * @return boolean           [description]
     */
    static function is_money_times($money){
        if(!is_numeric($money) || $money <= 0){
            return false;
        }
        return $money%100===0?true:false;
    }

    /**
     * desc：是否金额
     * author：wh
     */
    static function is_money($money){
        return (preg_match('/^[0-9]+.[0-9]+$/', $money) || preg_match('/^\d+$/', $money))?true:false;
    }

    /**
     * desc：是否小数数字
     * author：wh
     */
    static function is_float_number(string $num){
        return preg_match('/^[0-9]+.[0-9]+$/', $num)?true:false;
    }

    /**
     * desc：是否数字
     * author：wh
     */
    static function is_number(string $num){
        return preg_match('/^\d+$/', $num)?true:false;
    }

    /**
     * desc：是否字母
     * author：wh
     */
    static function is_letter(string $str){
        return preg_match('/^[a-zA-Z]+$/', $str) ? true : false;
    }

    /**
     * desc：是否字母或数字
     * author：wh
     */
    static function is_letter_or_number(string $str){
        return preg_match('/^[a-zA-Z|0-9]+$/', $str) ? true : false;
    }
}